package com.sz.biz.trade.bill.service;

import com.sz.biz.trade.bill.entity.TrdBillingOrderRel;
import com.sz.biz.trade.bill.dto.TrdBillingOrderListDto;
import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;

import java.util.List;
import java.util.Map;

/**
 * Function: 账单订单关联 <br>
 * Author: changwentao <br>
 * Date: 2017-07-18 14:09:00
 */

public interface TrdBillingOrderRelService {

    /**
     * 保存账单关联关系
     *
     * @param trdBillingOrderRel trdBillingOrderRel
     */
    void save(TrdBillingOrderRel trdBillingOrderRel);

    /**
     * 根据账单号获取账单下所有订单
     *
     * @param params params
     * @return QResultDto
     */
    QResultDto getOrdersByBillNo(QueryParams params);

    /**
     * 根据账单号获取账单下所有订单-客户平台
     *
     * @param billNo          billNo
     * @param orderNo         orderNo
     * @param goodsName      goodsName
     * @param customerId      customerId
     * @param startEffectTime startEffectTime
     * @param endEffectTime   endEffectTime
     * @param pageIndex       pageIndex
     * @param pageSize        pageSize
     * @param sort            sort
     * @param asc             asc
     * @return QResultDto
     */
    QResultDto getOrdersByBillNoForCustomer(int type,String billNo, String orderNo, String goodsName,
                                            Integer customerId, String startEffectTime, String endEffectTime,
                                            int pageIndex, int pageSize, String sort, Boolean asc);

    /**
     * 子帐号订单费用总计
     *
     * @param billNo
     * @param finalIsSup 0: 客户； 1： 供应商
     *@param userId  @return
     */
    Map<String, Object> getOrderAmountSub(String billNo, Integer finalIsSup, Integer userId);

    /**
     * 账单下所有订单
     *
     * @param billNo billNo
     * @return List
     */
    List<TrdBillingOrderListDto> findOrdersByBillNo(String billNo);

    /**
     * 根据账单号获取下属所有订单号
     *
     * @param billNos billNos
     * @return List
     */
    List<String> findOrderNosByBillNo(List<String> billNos);

    /**
     * 根据账单号删除
     *
     * @param billNo billNo
     * @param type type
     */
    void deleteByBillNo(String billNo,int type);

    /**
     * 根据任务编码删除账单订单关联
     *
     * @param taskCodes taskCodes
     */
    void batchDeleteByTaskCodes(List<String> taskCodes,int type);

    /**
     * 根据任务编码删除账单订单关联 只删除草稿账单的关联
     *
     * @param taskCodes taskCodes
     */
    void batchDeleteByTaskCodesDraft(List<String> taskCodes,int type);

    /**
     * 删除账单下所有订单
     *
     * @param billNos billNos
     */
    void deleteByBillNos(List<String> billNos,int type);
}
